/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * File Name          : freertos.c
 * Description        : Code for freertos applications
 ******************************************************************************
 * @attention
 *
 * Copyright (c) 2023 STMicroelectronics.
 * All rights reserved.
 *
 * This software is licensed under terms that can be found in the LICENSE file
 * in the root directory of this software component.
 * If no LICENSE file comes with this software, it is provided AS-IS.
 *
 ******************************************************************************
 */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"
// #include "delay.h"
// #include "GT911.h"
// #include "lvgl.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */
osThreadId_t LVGL_Out_Fsm_TaskHandle;
const osThreadAttr_t LVGL_Out_Fsm_Task_attributes = {
    .name = "LVGLOutFsmTask",
    .stack_size = 128 * 4,
    .priority = (osPriority_t)osPriorityNormal,
};
osThreadId_t LVGL_In_Fsm_TaskHandle;
const osThreadAttr_t LVGL_In_Fsm_Task_attributes = {
    .name = "LVGLInFsmTask",
    .stack_size = 128 * 4,
    .priority = (osPriority_t)osPriorityNormal,
};
osThreadId_t IIC_Test_TaskHandle;
const osThreadAttr_t IIC_Test_Task_attributes = {
    .name = "IICTestFsmTask",
    .stack_size = 128 * 4,
    .priority = (osPriority_t)osPriorityNormal,
};
/* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
    .name = "defaultTask",
    .stack_size = 128 * 4,
    .priority = (osPriority_t)osPriorityNormal,
};

/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
void LVGL_Out_Fsm_Task(void *argument);
void LVGL_In_Fsm_Task(void *argument);
void IIC_Test_Task(void *argument);
/* USER CODE END FunctionPrototypes */

void StartDefaultTask(void *argument);

void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */

/**
 * @brief  FreeRTOS initialization
 * @param  None
 * @retval None
 */
void MX_FREERTOS_Init(void)
{
    /* USER CODE BEGIN Init */
    // lv_init();
    /* USER CODE END Init */

    /* USER CODE BEGIN RTOS_MUTEX */
    /* add mutexes, ... */
    /* USER CODE END RTOS_MUTEX */

    /* USER CODE BEGIN RTOS_SEMAPHORES */
    /* add semaphores, ... */
    /* USER CODE END RTOS_SEMAPHORES */

    /* USER CODE BEGIN RTOS_TIMERS */
    /* start timers, add new ones, ... */
    /* USER CODE END RTOS_TIMERS */

    /* USER CODE BEGIN RTOS_QUEUES */
    /* add queues, ... */
    /* USER CODE END RTOS_QUEUES */

    /* Create the thread(s) */
    /* creation of defaultTask */
    defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);

    /* USER CODE BEGIN RTOS_THREADS */
    // LVGL_Out_Fsm_TaskHandle = osThreadNew(LVGL_Out_Fsm_Task, NULL, &LVGL_Out_Fsm_Task_attributes);
    // LVGL_In_Fsm_TaskHandle = osThreadNew(LVGL_In_Fsm_Task, NULL, &LVGL_In_Fsm_Task_attributes);
    IIC_Test_TaskHandle = osThreadNew(IIC_Test_Task, NULL, &IIC_Test_Task_attributes);
    /* USER CODE END RTOS_THREADS */

    /* USER CODE BEGIN RTOS_EVENTS */
    /* add events, ... */
    /* USER CODE END RTOS_EVENTS */
}

/* USER CODE BEGIN Header_StartDefaultTask */
/**
 * @brief  Function implementing the defaultTask thread.
 * @param  argument: Not used
 * @retval None
 */
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
    /* USER CODE BEGIN StartDefaultTask */
    /* Infinite loop */
    for (;;)
    {
        LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_13);
        osDelay(5000);
        LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_13);
        osDelay(5000);
    }
    /* USER CODE END StartDefaultTask */
}

/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */

void IIC_Test_Task(void *argument)
{
    // delay_init();
    // GT911_Init();
    // while (1)
    // {
    //     GT911_Scan(0);
    //     osDelay(10);
    // }
}

void LVGL_Out_Fsm_Task(void *argument)
{
    while (1)
    {
        // lv_tick_inc(5);                     // 处理输出
        osDelay(5);
    }
}

void LVGL_In_Fsm_Task(void *argument)
{
    while (1)
    {
        // lv_timer_handler();                 // 处理输入
        osDelay(5);
    }
}
/* USER CODE END Application */
